記得當初上課時第一次聽到軟刪除這個詞蠻震驚的,沒想到網路世界是這麼可怕的阿。
網路上的刪除有分兩種,軟刪除以及硬刪除:
在 Rails 內,當你使用 destroy 這個方法後就會直接從資料庫刪除檔案,也就是硬刪除。
假如想要使用軟刪除可以使用 paranoia 套件搭配 acts_as_paranoid。
現在我想把一個筆記的刪除變成軟刪除,我可以這樣做:
gem 'paranoia', '~> 2.4', '>= 2.4.3' # 目前 2.4.3 為最新版
rails g migration deleted_at
class DeletedAt < ActiveRecord::Migration[6.1]
def change
add_column :notes, :deleted_at, :datetime # 新增欄位: 資料表名稱,欄位名稱,型態
add_index :notes, :deleted_at # 新增索引: 加快查詢,概念有點像寫書會加的附錄
end
end
4.1 在 note model 新增 default_scope 讓所有的筆記都先預設為顯示 deleted_at 欄位裡面值是 nil 的筆記。
default_scope { where(deleted_at: nil) }
4.2 或是直接在 note model 輸入 acts_as_paranoid 也可以完成上述的行為。
acts_as_paranoid
def destroy
@note.update(deleted_at: Time.now)
end
=> 如此一來以後使用 destroy 方法刪除檔案時就會變成軟刪除了。
那假如我想用硬刪除該怎麼辦呢?
paranoia 幫你新增了一個方法叫 really_destroy!
使用他就可以變成硬刪除了。
參考:
[1]paranoia套件